package com.gxa.learning.core.util;

import com.gxa.learning.core.pojo.CommentVo;

import java.util.ArrayList;
import java.util.List;

/**
 * 生成权限树的工具类
 *
 * @author YXQ
 * @date 2021/12/2 22:44
 */
public class CommentTreeUtil {
    /**
     * 生成权限树的工具类
     *
     * @param roleAllMenuList 用户所有的菜单的列表
     * @return 生成的权限菜单
     */
    public static List<CommentVo> getOneMenu(List<CommentVo> roleAllMenuList) {
        List<CommentVo> newList = new ArrayList<>();
        // 得到权限的一级菜单
        for (CommentVo menuVo : roleAllMenuList) {
            // 一级菜单 父id 为0
            Long oneMenu = 0L;
            // 获得 父id
            Long pid = menuVo.getPId();
            // 父id 为0,表示这个菜单是一级菜单
            if (pid.equals(oneMenu)) {
                newList.add(menuVo);
            }
        }

        // 得到这个菜单下的子菜单
        for (CommentVo menuVo : newList) {
            Long id = menuVo.getId();
            menuVo.setChildrenCommentVo(getChildrenMenuList(id, roleAllMenuList));
        }

        return newList;
    }

    /**
     * 根据父菜单获得该菜单下的所有的子菜单的方法
     *
     * @param id              父菜单的id
     * @param roleAllMenuList 用户所有的菜单的列表
     * @return 权限菜单
     */
    public static List<CommentVo> getChildrenMenuList(Long id, List<CommentVo> roleAllMenuList) {
        List<CommentVo> newList = new ArrayList<>();
        for (CommentVo menuVo : roleAllMenuList) {
            Long pid = menuVo.getPId();
            if (id.equals(pid)) {
                newList.add(menuVo);
            }
        }

        // 得到这个菜单下的子菜单
        for (CommentVo menuVo : newList) {
            Long newId = menuVo.getId();
            menuVo.setChildrenCommentVo(getChildrenMenuList(newId, roleAllMenuList));
        }

        if (newList.size() == 0) {
            return newList;
        }

        return newList;
    }
}
